package com.itlong.cloud.operate.dao;

import com.itlong.cloud.POJO.PO.OperateFunctionPO;
import com.itlong.cloud.POJO.VO.operate.OperateFunctionVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      运营系统菜单资源数据访问接口
 * </desc>
 *
 * @createDate 2017-9-13 14:4
 */
@Mapper
@Repository
public interface IOperateFunctionDao extends IAbstractBaseDao<OperateFunctionPO>{
    /**
     * <desc>
     *      保存资源
     * </desc>
     *
     * @param params 数据参数
     * @return sql执行行数
     * @author Jiaqi.X
     * @createDate 2017/09/21
     */
    Integer save(Map<String,Object> params);
    /**
     * <desc>
     *      修改资源
     * </desc>
     *
     * @param params 数据参数
     * @return 执行行数
     * @author Jiaqi.X
     * @createDate 2017/09/21
     */
    Integer update(Map<String,Object> params);
    /**
     * <desc>
     *      获取分页数据集
     * </desc>
     *
     * @param params 查询参数
     * @return  分页数据集
     * @author Jiaqi.X
     * @createDate 2017/09/21
     */
    List<OperateFunctionPO> getPage(Map<String,Object> params);
    /**
     * <desc>
     *      获取分页总数量
     * </desc>
     *
     * @param params 查询参数
     * @return 总数量
     * @author Jiaqi.X
     * @createDate 2017/09/21
     */
    Integer getPageCount(Map<String,Object> params);

    /**
     * <desc>
     *      删除
     * </desc>
     *
     * @param functionIds 资源id数组
     * @return sql执行行数
     * @author Jiaqi.X
     * @createDate 2017/09/21
     */
    Integer delete(@Param("functionIds")String[] functionIds,@Param("updateTime") Date updateTime);

    /**
     * <desc>
     *      根据父节点id获取子节点集合
     * </desc>
     *
     * @param functionId 资源id
     * @param type 1列表 2权限
     * @return 子级结果数据集
     * @author Jiaqi.X
     * @createDate 2017/09/21
     */
    List<OperateFunctionVO> getChildsByParent(@Param("functionId") String functionId,@Param("type") Integer type);

    /**
     * <desc>
     *      通过角色id获取该角色拥有的所有节点
     * </desc>
     * @param roleId 角色id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/27
     */
    List<String> getRoleFunctions(@Param("roleId") String roleId);

    /**
     * <desc>
     *      通过角色id删除该角色拥有的所有节点
     * </desc>
     *
     * @param roleId 角色id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/27
     */
    Integer deleteRoleFunctions(@Param("roleId") String roleId);

    /**
     * <desc>
     *      获取当前资源节点的所有同级别节点
     * </desc>
     *
     * @param parent 资源id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/30
     */
    List<OperateFunctionPO> getParentLevelFunctions(@Param("parent")String parent);

    /**
     * <desc>
     *      获取父级资源
     * </desc>
     *
     * @param parent 资源id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/30
     */
    OperateFunctionPO getParent(@Param("parent")String parent);


    /**
     * <desc>
     *      通过角色id获取资源
     * </desc>
     *
     * @param roleIds 角色id
     * @param parent 父级节点id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/17
     */
    List<OperateFunctionVO> getFunctionByRoleId(@Param("roleIds") String[] roleIds,@Param("parent")String parent);

    /**
     * <desc>
     *      获取角色权限的所有资源
     * </desc>
     *
     * @param roleIds 角色id 多个,号分隔
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/17
     */
    List<OperateFunctionPO> getRoleAuthFunctions(@Param("roleIds") String[] roleIds);
}
